package gemsa.servlets.client;

import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import gemsa.modeles.ModeleReponse;
import gemsa.modeles.ModeleQuestion;
import gemsa.beans.Reponse;
import gemsa.beans.Question;

/**
 * Classe ServletGestionReponses
 * @author Projet Dev Groupe 33
 * @version 1.0 Finale
 */
 
@SuppressWarnings("serial")
public class ServletGestionReponses extends HttpServlet 
{
	// Variables 
	private DataSource datasource=null;
	
	// Traitements
	public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{		
		// R�cup�rer l'objet datasource du context de la servlet
		datasource=(DataSource)getServletContext().getAttribute("datasource");
		
		// Action a r�aliser
		String action=(String)request.getParameter("action");
		
		// Action par d�faut (liste)
		if(action==null || action.equalsIgnoreCase(""))
		{
			action="lister";
		}
		
		// Listing des reponses
		if(action.equals("lister"))
		{
			lister(request,response);
		}
		
		// Detail de la reponse
		if(action.equals("consulter"))
		{
			consulter(request, response);
		}
		
		// Vider l'objet datasource
		this.datasource=null;
	}
	
	
	
	
	// Listing des reponses 
	private void lister(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// Variables
		ModeleReponse modeleReponse=null;
		ModeleQuestion modeleQuestion=null;
		int idQuestion=0;
		int page=0;
		int maxParPage=0;
		Question question=null;
		ArrayList<Reponse> listeReponses=null;
		
		try 
		{
			// On r�cup�re l'id de la question
			idQuestion=Integer.parseInt(request.getParameter("idQuestion"));
			
			// Si l'id de la question est inf�rieur � 0, on cr�e une fausse question
			if(idQuestion<=0)
			{
				question=new Question();
				question.setId(0);
				question.setNom("Tous");
			}
			// Dans le cas contraire on r�cup�re l'objet question avec le mod�le
			else
			{
				modeleQuestion=new ModeleQuestion(datasource);
				question=modeleQuestion.getQuestion(idQuestion);
			}
		}
		catch(Exception e) 
		{
			// Si le param�tre idQuestion pass� dans la requ�te n'est pas un nombre
			question=new Question();
			question.setId(0);
			question.setNom("Tous");
		}
		
		try 
		{
			// On r�cup�re la page demand�e
			page=Integer.parseInt(request.getParameter("page"));
			
			// Si la page vaut 0 ou inf�rieur on prend la valeur 1
			page=Math.max(page, 1);
		}
		catch(Exception e) 
		{
			// Si le param�tre page pass� dans la requ�te n'est pas un nombre on l'initialise � 1
			page=1;
		}
		
		try 
		{
			// On r�cup�re le maximum d'�l�ments a afficher 
			maxParPage=Integer.parseInt(request.getParameter("maxParPage"));
			
			// Si maxParPage est inf�rieur � 5, on renvoie 5
			maxParPage=Math.max(maxParPage, 5);
		}
		catch(Exception e) 
		{
			// Si le param�tre maxParPage pass�e dans la requ�te n'est pas un nombre on l'initialise � 5 
			maxParPage=5;
		}

		// On initialise le mod�le
		modeleReponse=new ModeleReponse(datasource);
	
		// On r�cup�re la liste des reponses correspondant � la question demand�e
		listeReponses=(ArrayList<Reponse>)modeleReponse.listerReponse(idQuestion, maxParPage, page);
		
		// On renvoie � la JSP la liste de obtenue ainsi que les informations de pagination
		request.setAttribute("listeReponses",listeReponses);
		request.setAttribute("maxParPage", modeleReponse.getMaxParPage());
		request.setAttribute("pageActuel", modeleReponse.getPageActuel());
		request.setAttribute("totalElement", modeleReponse.getTotalElement());
		request.setAttribute("question", question);
		
		// On renvoie de plus � la vue les messages d'erreurs
		request.setAttribute("erreurs",(String)request.getParameter("erreurs"));
		
		// On vide cette liste par s�curit�
		listeReponses=null;
		
		// On renvoie la vue de liste des reponses
		getServletContext().getRequestDispatcher("/vues/utilisateurs/listereponses.jsp").forward(request,response);
	}
	
	

	
	// Detail de la reponse
	private void consulter(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
	{
		// Variables
		ModeleReponse modeleReponse=null;
		int idReponse=0;
		Reponse reponse=null;
		
		try
		{
			// On r�cup�re l'id de la reponse
			idReponse=Integer.parseInt(request.getParameter("idReponse"));
		}
		catch(Exception e) 
		{
			// Si l'id de la reponse pass� en param�tre n'est pas un nombre, on initialise l'id � 0
			idReponse=0;
		}
		
		// On initialise le mod�le
		modeleReponse=new ModeleReponse(datasource);
		
		// On r�cup�re la reponse correspondante, renvoi null si l'id de la reponse n'existe pas dans la base
		reponse=(Reponse)modeleReponse.getReponse(idReponse);
		
		// Si l'objet reponse est null (id non trouv�) on renvoie sur la page de listing avec un message d'erreur
		if(reponse!=null)
		{
			// On renvoie � la JSP la reponse demand�e
			request.setAttribute("reponse",reponse);
			
			// On vide cette reponse par s�curit�
			reponse=null;
			
			// On renvoie � la vue de consultation des informations d'une reponse
			getServletContext().getRequestDispatcher("/vues/utilisateurs/consulterreponse.jsp").forward(request,response);
		}
		else
		{
			// On renvoie � la page de liste des reponses avec un message d'erreur
			response.sendRedirect("gestionReponses?action=lister&erreurs=" + "Cette reponse n'est pas ou plus r�f�renc�e dans la base");
		}		
	}
	
	
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException
	{
		doGet(request, response);
	}
	
	
}